'use strict';

/**
 * @description 企业、个人注册接口
 * @param {Object}  ctx 函数的执行上下文
 * @param {Object}  args 前端传递过来的参数
 */

const db = uniCloud.database();
const { uuid } = require('uuid');
const { pass } = require('pass-word');
const { getNowFormatTime } = require('format-time');
const { SuccessModel, ErrorModel } = require('status-modal');

console.log(getNowFormatTime());

exports.main = async (args, ctx) => {
	const { type } = args; //获取前端传递过来的注册类型
	const appKey = pass(6); //生成随机密码
	const appId = uuid(8, 10); //生成随机账号
	const userCollection = db.collection('user'); //连接数据库中的user表
	const comCollection = db.collection('company'); //连接数据库中的company表

	/**
	 * @description 用户注册模块
	 * @param {String} sex 性别
	 * @param {String} type 类型
	 * @param {String} idno 身份证号
	 * @param {String} birth 出生年月
	 * @param {String} email 邮箱地址
	 * @param {String} address 籍贯地址
	 * @param {String} phoneNum 手机号码
	 * @param {String} username 用户姓名
	 */
	const userModel = async (data) => {
		const { sex, type, idno, birth, email, address, phoneNum, username } = args;
		try {
			data.forEach(item => {
				if (item.idno === idno) {
					throw new Error('该用户已注册');
				}
			})
			if (!sex) throw new Error('请输入性别');
			else if (!type) throw new Error('请选择注册类型');
			else if (!idno) throw new Error('请输入身份证号码');
			else if (!birth) throw new Error('请输入出生年月');
			else if (!email) throw new Error('请输入邮箱地址');
			else if (!address) throw new Error('请输入籍贯地址');
			else if (!phoneNum) throw new Error('请输入手机号码');
			else if (!username) throw new Error('请输入用户姓名');
			// 写入数据库
			const res = await userCollection.add({
				appId,
				appKey,
				...args,
				status: 0,
				createTime: getNowFormatTime(),
			})
			if (res.inserted) {
				return new SuccessModel('注册成功，等待管理员审核');
			}
		} catch (e) {
			return new ErrorModel(e.message);
		}
	}

	/**
	 * @description 企业注册模块
	 * @param {String} code 信用代码
	 * @param {String} type 类型
	 * @param {String} email 企业邮箱
	 * @param {String} money 注册资金
	 * @param {String} scope 经营范围
	 * @param {String} c_name 企业名称
	 * @param {String} manager 法人/负责人
	 * @param {String} reg_address 注册地址
	 * @param {String} real_address 企业联系地址
	 * @param {String} phoneNum 法人/负责人联系电话
	 */
	const companyModel = async (data) => {
		const {
			code,
			type,
			email,
			money,
			scope,
			c_name,
			manager,
			phoneNum,
			reg_address,
			real_address,
		} = args;
		try {
			data.forEach(item => {
				if (item.code === code) {
					throw new Error('该企业已注册');
				}
			})
			if (!code) throw new Error('请输入信用代码');
			else if (!type) throw new Error('请选择注册类型');
			else if (!email) throw new Error('请输入邮箱地址');
			else if (!money) throw new Error('请输入注册资金');
			else if (!scope) throw new Error('请输入经营范围');
			else if (!c_name) throw new Error('请输入企业名称');
			else if (!manager) throw new Error('请输入法人/负责人');
			else if (!phoneNum) throw new Error('请输入法人/负责人联系电话');
			else if (!reg_address) throw new Error('请输入注册地址');
			else if (!real_address) throw new Error('请输入企业联系地址');
			// 写入数据库
			const res = await comCollection.add({
				appId,
				appKey,
				...args,
				status: 0,
				createTime: getNowFormatTime(),
			})
			if (res.inserted) {
				return new SuccessModel('注册成功，等待管理员审核');
			}
		} catch (e) {
			return new ErrorModel(e.message);
		}
	}
	const userList = await userCollection.get(); //查询user表当中的所有数据
	const companyList = await comCollection.get(); //查询company表当中的所有数据
	const result = type == 'man' ? await userModel(userList.data) : await companyModel(companyList.data);
	return result
};
